package results;

public class DefaultResult implements Result {

	// Il numero di stazioni va da 0 a m-1
	// Il numero di clienti va da 0 a n (compreso)
	
	private double e_n[][];
	private double e_w[][];
	private double x[][];
	private double u[][];
	
	public DefaultResult(int m, int n) {
		e_n = new double[m][n+1];
		e_w = new double[m][n+1];
		x = new double[m][n+1];
		u = new double[m][n+1];
	}
	
	@Override
	public void set_e_w(int i, int k, double value) {
		e_w[i][k] = value;

	}

	@Override
	public void set_e_n(int i, int k, double value) {
		e_n[i][k] = value;

	}

	@Override
	public void set_x(int i, int k, double value) {
		x[i][k] = value;

	}

	@Override
	public void set_u(int i, int k, double value) {
		u[i][k] = value;

	}

	@Override
	public double get_e_w(int i, int k) {
		return e_w[i][k];
	}

	@Override
	public double get_e_n(int i, int k) {
		return e_n[i][k];
	}

	@Override
	public double get_x(int i, int k) {
		return x[i][k];
	}

	@Override
	public double get_u(int i, int k) {
		return u[i][k];
	}
	
	public int get_numero_stazioni() {
		return e_n.length;
	}
	
	@Override
	public void print() {
		this.print(1,e_n[0].length-1);		
	}
	
	// Order 1: Stampa per stazioni
	// Order 2: Stampa per risultati
	public void print(int order, int n) throws IllegalArgumentException {
		System.out.println("Stampa dei risultati");
		System.out.println();
		
		if(n != 0 && n > e_n[0].length)			throw new IllegalArgumentException("Numero di clienti maggiore al massimo consentito");
		
		if(order == 2 && n==0) {
			System.out.println("Numero medio di clienti:");
			for(int i=0; i<e_n.length; i++) {
				for(int k=0; k<e_n[i].length;k++) {
					System.out.println("Stazione " + i + " con " + k + "clienti: " + e_n[i][k]);
				}				
			}
			System.out.println();
			System.out.println("Tempo medio di attesa:");
			for(int i=0; i<e_w.length; i++) {
				for(int k=0; k<e_w[i].length;k++) {
					System.out.println("Stazione " + i + " con " + k + "clienti: " + e_w[i][k]);
				}				
			}
			System.out.println();
			System.out.println("Troughput:");
			for(int i=0; i<x.length; i++) {
				for(int k=0; k<x[i].length;k++) {
					System.out.println("Stazione " + i + " con " + k + "clienti: " + x[i][k]);
				}				
			}
			System.out.println();
			System.out.println("Utilizzazione:");
			for(int i=0; i<u.length; i++) {
				for(int k=0; k<u[i].length;k++) {
					System.out.println("Stazione " + i + " con " + k + "clienti: " + u[i][k]);
				}				
			}
		} else if(order==2 && n!=0) {
			System.out.println("Numero medio di clienti:");
			for(int i=0; i<e_n.length; i++) {
				System.out.println("Stazione " + i + " con " + n + "clienti: " + e_n[i][n]);				
			}
			System.out.println();
			System.out.println("Tempo medio di attesa:");
			for(int i=0; i<e_w.length; i++) {
				System.out.println("Stazione " + i + " con " + n + "clienti: " + e_w[i][n]);
			}
			System.out.println();
			System.out.println("Troughput:");
			for(int i=0; i<x.length; i++) {
				System.out.println("Stazione " + i + " con " + n + "clienti: " + x[i][n]);
			}
			System.out.println();
			System.out.println("Utilizzazione:");
			for(int i=0; i<u.length; i++) {
				System.out.println("Stazione " + i + " con " + n + "clienti: " + u[i][n]);				
			}
		} else if(order==1 && n==0) {
			for(int i=0; i<e_n.length; i++) {
				System.out.println("Stazione i:");
				System.out.println("Numero medio di clienti:");
				for(int k=0; k<e_n[i].length;k++) {
					System.out.println("Stazione " + i + " con " + k + "clienti: " + e_n[i][k]);
				}
				System.out.println("Tempo medio di attesa:");
				for(int k=0; k<e_w[i].length;k++) {
					System.out.println("Stazione " + i + " con " + k + "clienti: " + e_w[i][k]);
				}
				System.out.println("Throughput:");
				for(int k=0; k<x[i].length;k++) {
					System.out.println("Stazione " + i + " con " + k + "clienti: " + x[i][k]);
				}
				System.out.println("Utilizzazione:");
				for(int k=0; k<u[i].length;k++) {
					System.out.println("Stazione " + i + " con " + k + "clienti: " + u[i][k]);
				}
				System.out.println();
				System.out.println();
			}
			
			
		} else if(order==1 && n!=0) {
			for(int i=0; i<e_n.length; i++) {
				//System.out.println(e_n.length);
				//System.out.println(e_n[i].length);
				System.out.println("Stazione "+i+" con " + n + " clienti:");
				System.out.println("Numero medio di clienti:" + e_n[i][n]);
				System.out.println("Tempo medio di attesa:" + e_w[i][n]);
				System.out.println("Throughput:" + x[i][n]);
				System.out.println("Utilizzazione:" + u[i][n]);
				System.out.println();
				System.out.println();		
			}
		} else {
			System.out.println("Opzione non valida");
					
		}
		
		
	}

}
